use serde::{Serialize, Deserialize};
use crate::extends::core::db::sql_direction::DirectionEnum;
use super::order::Order;

/// Sorter 结构体用于封装排序信息
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Sorter {
    /// 排序条件的集合
    pub orders: Vec<Order>,
}

impl Sorter {
    /// 创建新的 Sorter 实例
    ///
    /// # 参数
    /// * `orders` - 一个包含排序条件的向量
    ///
    /// # 返回值
    /// 返回一个新的 Sorter 实例
    pub fn new(orders: Vec<Order>) -> Self {
        Sorter { orders }
    }

    /// 添加排序条件
    ///
    /// # 参数
    /// * `order` - 一个排序条件
    ///
    /// # 返回值
    /// 返回 Sorter 实例本身
    pub fn add_order(&mut self, order: Order) -> &mut Self {
        self.orders.push(order);
        self
    }

    /// 清空所有排序条件
    ///
    /// # 返回值
    /// 返回 Sorter 实例本身
    pub fn clear_orders(&mut self) -> &mut Self {
        self.orders.clear();
        self
    }
}

fn main() {
    // 创建一个新的 Sorter 实例，包含两个排序条件
    let mut sorter = Sorter::new(vec![
        Order { property: "name".to_string(), direction: DirectionEnum::ASC },
        Order { property: "created_at".to_string(), direction: DirectionEnum::DESC },
    ]);

    // 添加一个新的排序条件
    sorter.add_order(Order { property: "email".to_string(), direction: DirectionEnum::ASC });

    // 清空所有排序条件
    sorter.clear_orders();

    // 输出 Sorter 对象
    log::info!("{:?}", sorter);
}
